In the nested session the startup animation sometimes fails, weirdly
that always happens to me when running a freshly built gnome-shell the
first time. The reason it fails is that mutter fails to aquire a pointer
grab from the xserver, XIGrabDevice() is unsuccessful.
A simple workaround for this race condition in the xserver is to just
grab the devices a bit later, that is after the startups animation
instead of before it.
This was also tested with disabled animations, and seems to work just as
well in that case.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1812>
this._visible = true;
this._visibleTarget = true;
Main.layoutManager.showOverview();
- this._syncGrab();
+ // We should call this._syncGrab() here, but moved it to happen after
+ // the animation because of a race in the xserver where the grab
+ // fails when requested very early during startup.
Meta.disable_unredirect_for_display(global.display);
this.emit('showing');
this._overview.runStartupAnimation(() => {
+ if (!this._syncGrab()) {
+ callback();
+ return;
+ }
+
Main.panel.style = null;
this.emit('shown');
callback();